VOS - Geolocatie
Home

VOS - Geolocatie

VOS - Geolocatie

De app moet op elk moment de dichtsbijzijnde school aangeven.

Geo-coördinaten

Om de dichtsbijzijnde school vinden slaan de geo-coordinaten van de scholen op voor elke school. Deze staan in het data/organisationList.json bestand:

[
  {
    "name": "Atheneum Irishof Campus Kapellen",
    "street": "Streepstraat 16",
    "postalcode": "2950",
    "city": " Kapellen",
    "email": "ka.kapellen@g-o.be",
    "phone": "03 660 13 00",
    "directie": {
      "firstName": "Brigitta",
      "lastName": "Verlent",
      "phone": "0486788723"
    },
    "secretariaat": {
      "phone": "0486788723"
    },
    "preventieadviseur": {
      "firstName": "Frederic",
      "lastName": "Jaminet",
      "phone": "0486788723"
    },
    "latitude": "51.31974150000001",
    "longitude": "4.424790499999972",
    "distanceFromMyLocation" : 0
  },
  ...

Geolocatie van de telefoon ophalen

Om de dichtsbijzijnde school te vinden moeten we eerst de geolocatie van de telefoon te weten komen. Hoe je de plugin gebruikt en installeert zie Cordova - Geolocation. Om de geolocatie in VOS op te halen maken we een methode met de naam getPosition in de vos namespace:

var vos = {
   /**
    * Geolocatie van de telefoon ophalen
    *
    */
   getPosition: function () {
     var options = {
        maximumAge: 3600000,
        timeout: 6000,
        enableHighAccuracy: false
     }
     var onSuccess = function (pos) {
        vos.model.position.latitude = pos.coords.latitude.toFixed(4);
        vos.model.position.longitude = pos.coords.longitude.toFixed(4);
        //vos.setMyLocation();
        //render.identity('#identity');
        //view['home']['index']();
     };
     var onError = function (error) {
        // stel in op hoofdzetel
        vos.model.position.latitude = 51.1771;
        vos.model.position.longitude = 4.3533;
        //vos.setMyLocation();
        //render.identity('#identity');
        //view['home']['index']();
     };
     var watchID = navigator.geolocation.getCurrentPosition(onSuccess, onError, options);
    },
    ...

Geolocatie opslaan

Als we geolocatie kennen slagen we die op in het model. Daarnaast berekenen we ook hoevel elke school zich bevindt van de plaats waar de gebruiker zich bevindt. Deze afstand slaan we op in de eigenschap distanceFromMyLocation van de origanisation. Vervlogens zoeken we de dichtsbijzijnde school. Indien de geolocatie niet gevonden kan worden retourneren we de eerste school in de lijst. De setMyLocation methode staat ook in de vos namespace:

var vos = { 
  /**
    * De dichtsbijzijnde organisatie ophalen.
    * https://stackoverflow.com/questions/21279559/geolocation-closest-locationlat-long-from-my-position
    */
   setMyLocation: function () {
     vos.model.organisationList.forEach(function (item) {
        item.distanceFromMyLocation = getDistanceFromLatLonInKm(
            vos.model.position.latitude, vos.model.position.longitude,
            item.latitude, item.longitude);
     });
     vos.model.organisationList.sort(function (a, b) {
        return a.distanceFromMyLocation - b.distanceFromMyLocation;
     });

     vos.model.organisationList.forEach(
        function (item) {
            document.getElementById("feedback").innerHTML = '';
            document.getElementById("feedback").innerHTML += item.distanceFromMyLocation + ' ' + 
               item.longitude + ' ' + item.latitude + ' ' + item.name + '<br>';
         });
     vos.model.myLocation = vos.model.organisationList[0];
   },
   ...

Deze methode roepen we op telkens wanneer de gebruiker een actie onderneemt. Dus in de controller gaan we telkens deze methode oproepen:

var controller = {
    'home': {
        'index': function () {
            vos.getPosition();
            vos.setMyLocation();
            render.identity('#home .identity');
            view['home']['index']();
        },

De locatie wort dan in de render.identity aan de gebruiker getoond.

JI
2017-12-15 15:59:59